﻿using System;
using System.Linq;
using SubsidiosBussinessLogic.Models;

namespace SubsidiosBussinessLogic.DataAccess.Interfaces
{
    public interface IMontoPresupuestoRepository
    {
        /// <summary>
        /// Retorna una coleccion de MontoPresupuesto
        /// </summary>
        /// <returns></returns>
        IQueryable<MontoPresupuesto> GetMontoPresupuestos();

        /// <summary>
        /// Crea una nueva instancia de MontoPresupuesto
        /// </summary>
        /// <returns></returns>
        MontoPresupuesto CreateMontoPresupuesto();

        /// <summary>
        /// Prepara para borrar un MontoPresupuesto
        /// </summary>
        /// <param name="montoPresupuesto"></param>
        void DeleteMontoPresupuesto(MontoPresupuesto montoPresupuesto);

        /// <summary>
        /// Devuelve una sola instancia del objeto que machea con el filtro
        /// </summary>
        /// <param name="exp"></param>
        /// <returns></returns>
        MontoPresupuesto FindSingle(Func<MontoPresupuesto, bool> exp);

        /// <summary>
        /// Devuelve todos los objetos que machean con el filtro
        /// </summary>
        /// <param name="exp"></param>
        /// <returns></returns>
        IQueryable<MontoPresupuesto> FindWithMatch(Func<MontoPresupuesto, bool> exp);

        /// <summary>
        /// Commitea los cambios en la base
        /// </summary>
        void SaveMontoPresupuesto();

    }
}
